/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package newpeer;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.filechooser.FileFilter;

/**
 *
 * @author Administrador
 */
public class DialogoBusquedaArchivos extends JDialog implements ActionListener {

    public final static String BUSCAR = "BUSCAR";
    public final static String DESCARGAR = "DESCARGAR";
    private PanelBotonesAcciones pba;
    private JButton botonBuscar;
    private JTextField txtCriterioBusqueda;
    private JTextField txtTipoBusqueda;
    //Busqueda por contenidos
    private JTextField txtArtista;
    private JTextField txtCancion;
    private JTextField txtAnoAlbum;
    private JTextField txtNombreAlbum;
    private JList listaResultados;
    private Peer padre;
    private JButton botonDescarga;
    private PipeAdvertisementArchivo advArchivoSeleccionado;
    private JCheckBox checkContenidos;

    public DialogoBusquedaArchivos(Peer interfaz, PanelBotonesAcciones pba) {
        this.advArchivoSeleccionado = null;
        this.padre = interfaz;
        this.pba = pba;
        setTitle("Búsqueda de Archivos");
        setLayout(new BorderLayout(15, 15));
        setLocationRelativeTo(interfaz);
        setSize(500, 500);
        //Zona de búsqueda
        TitledBorder tbBusqueda = new TitledBorder("Búsqueda de archivos");
        JPanel panelBusqueda = new JPanel();
        panelBusqueda.setLayout(new BorderLayout(5, 10));
        panelBusqueda.setBorder(tbBusqueda);
        this.txtCriterioBusqueda = new JTextField();
        this.txtTipoBusqueda = new JTextField();
        this.botonBuscar = new JButton("Buscar");
        this.botonBuscar.addActionListener(this);
        //Busqueda por contenidos avanzada
        this.checkContenidos = new JCheckBox("Búsqueda por contenidos");
        this.checkContenidos.setSelected(false);
        this.checkContenidos.addItemListener(new ItemListener() {

            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.DESELECTED) {
                    txtAnoAlbum.setEnabled(false);
                    txtArtista.setEnabled(false);
                    txtCancion.setEnabled(false);
                    txtNombreAlbum.setEnabled(false);
                } else if (e.getStateChange() == ItemEvent.SELECTED) {
                    txtAnoAlbum.setEnabled(true);
                    txtArtista.setEnabled(true);
                    txtCancion.setEnabled(true);
                    txtNombreAlbum.setEnabled(true);
                }
            }
        });
        //"Año Álbum"
        this.txtAnoAlbum = new JTextField();
        this.txtAnoAlbum.setBorder(new TitledBorder("Año Álbum:"));
        //"Artista"
        this.txtArtista = new JTextField();
        this.txtArtista.setBorder(new TitledBorder("Artista:"));
        //"Canción"
        this.txtCancion = new JTextField();
        this.txtCancion.setBorder(new TitledBorder("Canción:"));
        //"Nombre Álbum"
        this.txtNombreAlbum = new JTextField();
        this.txtNombreAlbum.setBorder(new TitledBorder("Nombre Álbum:"));

        txtAnoAlbum.setEnabled(false);
        txtArtista.setEnabled(false);
        txtCancion.setEnabled(false);
        txtNombreAlbum.setEnabled(false);


        JPanel panelBusquedaContenidos = new JPanel();
        panelBusquedaContenidos.setBorder(new TitledBorder("Búsqueda Contenidos"));
        panelBusquedaContenidos.setLayout(new GridLayout(5, 1, 5, 10));
        panelBusquedaContenidos.add(checkContenidos);
        panelBusquedaContenidos.add(txtArtista);
        panelBusquedaContenidos.add(txtCancion);
        panelBusquedaContenidos.add(txtNombreAlbum);
        panelBusquedaContenidos.add(txtAnoAlbum);

        this.botonBuscar.setActionCommand(BUSCAR);

        panelBusqueda.add(txtCriterioBusqueda, BorderLayout.CENTER);
        panelBusqueda.add(botonBuscar, BorderLayout.EAST);


        //panelBusqueda.add(txtTipoBusqueda, BorderLayout.SOUTH);
        //Create the radio buttons.
        JRadioButton contenidoButton = new JRadioButton("Por Contenido");
        contenidoButton.setActionCommand("X Contenido");
        contenidoButton.setSelected(true);
        txtTipoBusqueda.setText("X Contenido");

        JRadioButton tamanoButton = new JRadioButton("Por Tamaño");
        tamanoButton.setActionCommand("X Extension");

        JRadioButton archivoButton = new JRadioButton("Por nombre archivo");
        archivoButton.setActionCommand("X Archivo");

        //Group the radio buttons.
        ButtonGroup group = new ButtonGroup();
        group.add(contenidoButton);
        group.add(tamanoButton);
        group.add(archivoButton);

        contenidoButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                txtTipoBusqueda.setText("X Contenido");
            }
        });
        tamanoButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                txtTipoBusqueda.setText("X Extension");
                JFileChooser chooserArchivoMP3 = new JFileChooser();
                chooserArchivoMP3.setFileFilter(new FileFilter() {

                    @Override
                    public boolean accept(File f) {
                        boolean archivoMP3 = f.getName().endsWith("mp3");
                        boolean carpeta = f.isDirectory();
                        return archivoMP3 || carpeta;
                    }

                    @Override
                    public String getDescription() {
                        return "Archivos MP3 *.mp3";
                    }
                });
                chooserArchivoMP3.setDialogTitle("Seleccione el archivo para compartir");
                chooserArchivoMP3.setDialogType(JFileChooser.CUSTOM_DIALOG);

                int resultado = chooserArchivoMP3.showOpenDialog(null);

                if (resultado == JFileChooser.APPROVE_OPTION) {
                    File archivo = chooserArchivoMP3.getSelectedFile();
                    //String rutaArchivo = archivo.getAbsolutePath();
                    String criterio = ""+archivo.length();
                    String tipobusqueda = txtTipoBusqueda.getText();
                    String[] contenidos = new String[1];
                    if (tipobusqueda.equals("X Contenido")) {
                        contenidos = new String[4];
                        contenidos[0] = txtArtista.getText();
                        contenidos[1] = txtCancion.getText();
                        contenidos[3] = txtAnoAlbum.getText();
                        contenidos[2] = txtNombreAlbum.getText();
                    }
                    System.out.println(criterio);
                    System.out.println(tipobusqueda);
                    try {
                        DialogoBusquedaArchivos.this.padre.buscarArchivos(criterio, tipobusqueda, DialogoBusquedaArchivos.this, contenidos);
                    //this.listaResultados.setListData(resultadoBusqueda);
                    } catch (IOException ex) {
                        JOptionPane.showMessageDialog(padre, "Error en la búsqueda de archivos", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }

            }
        });
        archivoButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                txtTipoBusqueda.setText("X Archivo");
            }
        });

        JPanel panelCriterios = new JPanel(new GridLayout(1, 3));
        panelCriterios.add(contenidoButton);
        panelCriterios.add(archivoButton);
        panelCriterios.add(tamanoButton);
        panelBusqueda.add(panelCriterios, BorderLayout.SOUTH);


        add(panelBusqueda, BorderLayout.NORTH);
        add(panelBusquedaContenidos, BorderLayout.EAST);

        //Zona de resultados
        this.listaResultados = new JList();
        this.listaResultados.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        this.listaResultados.setBorder(new TitledBorder("Resultados búsqueda"));
        this.listaResultados.addListSelectionListener(new ListSelectionListener() {

            public void valueChanged(ListSelectionEvent e) {
                JList lista = (JList) e.getSource();
                advArchivoSeleccionado = (PipeAdvertisementArchivo) lista.getSelectedValue();
            }
        });
        JScrollPane listScroller = new JScrollPane(this.listaResultados);
        listScroller.setPreferredSize(new Dimension(250, 80));
        add(listScroller, BorderLayout.CENTER);

        //Zona de descarga
        this.botonDescarga = new JButton("Descargar");
        //this.botonDescarga.setEnabled(false);
        this.botonDescarga.addActionListener(this);
        this.botonDescarga.setActionCommand(DESCARGAR);
        JPanel panelDescarga = new JPanel();
        panelDescarga.setLayout(new GridLayout(1, 3, 20, 10));
        panelDescarga.add(this.botonDescarga);

        add(panelDescarga, BorderLayout.SOUTH);

    }

    public void actionPerformed(ActionEvent e) {
        String comando = e.getActionCommand();
        if (comando.equals(BUSCAR)) {
            String criterio = txtCriterioBusqueda.getText();
            String tipobusqueda = txtTipoBusqueda.getText();
            String[] contenidos = new String[1];
            if (tipobusqueda.equals("X Contenido")) {
                contenidos = new String[4];
                contenidos[0] = txtArtista.getText();
                contenidos[1] = txtCancion.getText();
                contenidos[3] = txtAnoAlbum.getText();
                contenidos[2] = txtNombreAlbum.getText();
            }
            System.out.println("Criterio"+criterio);
            System.out.println(tipobusqueda);
            try {
                this.padre.buscarArchivos(criterio, tipobusqueda, this, contenidos);
            //this.listaResultados.setListData(resultadoBusqueda);
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(padre, "Error en la búsqueda de archivos", "Error", JOptionPane.ERROR_MESSAGE);
            }
        } else if (comando.equals(DESCARGAR)) {
            if (advArchivoSeleccionado.equals("")) {
                JOptionPane.showMessageDialog(this, "Seleccione un archivo para descargar");
            } else {
                this.padre.descargarArchivo(advArchivoSeleccionado.getOSName(), advArchivoSeleccionado.getOStamano());
            }
        }
    }

    public void actualizarListaArchivos(HashMap<String, PipeAdvertisementArchivo> hashAdv) {
        Collection<PipeAdvertisementArchivo> arlist = hashAdv.values();
        listaResultados.setListData(arlist.toArray());
        if(arlist.size()==0){
            JOptionPane.showMessageDialog(null, "No hay resultados para la búsqueda");
        }
    }
}
